/**
 * 工具函数模块
 * @module utils
 */
const fs = require('fs');
const path = require('path');

/**
 * 检查并创建目录
 * @param {string} dirPath - 目录路径
 */
function ensureDirectory(dirPath) {
    if (!fs.existsSync(dirPath)) {
        fs.mkdirSync(dirPath, { recursive: true });
    }
}

/**
 * 生成随机文件名
 * @param {string} originalName - 原始文件名
 * @return {string} 随机生成的文件名
 */
function generateRandomFilename(originalName) {
    const ext = path.extname(originalName);
    const randomStr = Math.random().toString(36).substring(2, 10);
    return `${randomStr}${ext}`;
}

/**
 * 计算下载速度
 * @param {number} bytes - 字节数
 * @param {number} seconds - 秒数
 * @return {string} 格式化后的速度字符串
 */
function calculateSpeed(bytes, seconds) {
    if (seconds === 0) return '0 B/s';

    const bps = bytes / seconds;
    if (bps < 1024) return `${bps.toFixed(2)} B/s`;
    if (bps < 1024 * 1024) return `${(bps / 1024).toFixed(2)} KB/s`;
    return `${(bps / (1024 * 1024)).toFixed(2)} MB/s`;
}

/**
 * 格式化文件大小
 * @param {number} bytes - 字节数
 * @return {string} 格式化后的文件大小
 */
function formatFileSize(bytes) {
    if (bytes < 1024) return `${bytes} B`;
    if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
    if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
    return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
}

/**
 * 删除临时文件
 * @param {string} filePath - 文件路径
 */
function cleanupTempFiles(filePath) {
    if (fs.existsSync(filePath)) {
        fs.unlinkSync(filePath);
    }
}

/**
 * 读取JSON文件
 * @param {string} filePath - 文件路径
 * @return {Object|null} 解析后的JSON对象或null
 */
function readJsonFile(filePath) {
    try {
        if (fs.existsSync(filePath)) {
            const content = fs.readFileSync(filePath, 'utf-8');
            return JSON.parse(content);
        }
    } catch (error) {
        console.error(`Error reading JSON file ${filePath}:`, error);
    }
    return null;
}

/**
 * 写入JSON文件
 * @param {string} filePath - 文件路径
 * @param {Object} data - 要写入的数据
 */
function writeJsonFile(filePath, data) {
    try {
        ensureDirectory(path.dirname(filePath));
        fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
    } catch (error) {
        console.error(`Error writing JSON file ${filePath}:`, error);
    }
}

/**
 * 获取当前时间戳字符串
 * @return {string} 格式化的时间戳
 */
function getCurrentTimestamp() {
    return new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '');
}

module.exports = {
    ensureDirectory,
    generateRandomFilename,
    calculateSpeed,
    formatFileSize,
    cleanupTempFiles,
    readJsonFile,
    writeJsonFile,
    getCurrentTimestamp
};